//
//  LeaveScreenRenderViewController.m
//  CoreAnimation
//
//  Created by 张国文 on 16/11/3.
//  Copyright © 2016年 hangzhouyijiyin. All rights reserved.
//

#import "LeaveScreenRenderViewController.h"

@interface LeaveScreenRenderViewController ()

@property (nonatomic, strong) UIView *backgroundView;

@property (nonatomic, strong) UIImageView *testImageV;

@end

@implementation LeaveScreenRenderViewController

/**
 *  离屏渲染
 
 当图层属性的混合体被指定为在未预合成之前不能直接在屏幕中绘制时，屏幕外渲染就被唤起了。屏幕外渲染并不意味着软件绘制，但是它意味着图层必须在被显示之前在一个屏幕外上下文中被渲染（不论CPU还是GPU）。图层的以下属性将会触发屏幕外绘制：
 
1、 圆角（当和maskToBounds一起使用时）
 
2、图层蒙板
 
3、 阴影
 
 屏幕外渲染和我们启用光栅化时相似，除了它并没有像光栅化图层那么消耗大，子图层并没有被影响到，而且结果也没有被缓存，所以不会有长期的内存占用。但是，如果太多图层在屏幕外渲染依然会影响到性能。
 
 有时候我们可以把那些需要屏幕外绘制的图层开启光栅化以作为一个优化方式，前提是这些图层并不会被频繁地重绘。
 
 对于那些需要动画而且要在屏幕外渲染的图层来说，你可以用CAShapeLayer        
 来获得同样的表现而且较少地影响到性能。
 */

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];
    
    self.backgroundView = [[UIView alloc] initWithFrame:self.view.frame];
    self.backgroundView.backgroundColor = [UIColor colorWithRed:150 / 255.0 green:150 / 255.0 blue:150 / 255.0 alpha:1];
    [self.view addSubview:_backgroundView];
    
    self.testImageV = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [self.backgroundView addSubview:_testImageV];
    
    // 运用CAShapeLayer解决离屏渲染的性能问题,如果是只画一个圆形的图片的话，不用加载图片
    CAShapeLayer *tempShape = [CAShapeLayer layer];
    tempShape.frame = CGRectMake(0, 0, 100, 100);
   tempShape.path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)].CGPath;
    tempShape.fillColor = [UIColor redColor].CGColor;
    [self.testImageV.layer addSublayer:tempShape];
    
    // 如果需要加载图片，还是老老实实的cornerRadius和maskToBounds结合使用吧，只能使用离屏渲染了
    CAShapeLayer *tempShape2 = [CAShapeLayer layer];
    tempShape2.frame = CGRectMake(100, 250, 100, 100);
    tempShape2.contents = (__bridge id _Nullable)([UIImage imageNamed:@"snowMan"].CGImage);
    tempShape2.cornerRadius = 50.0f;
    tempShape2.masksToBounds = YES;
    [self.backgroundView.layer addSublayer:tempShape2];
    

    
    
}



@end
